home *** CD-ROM | disk | FTP | other *** search
/ develop, the CD; issue 1 / Apple_Develop_1989.bin / Perils of PostScript / TipsTwoThirds.p < prev    next >
Text File  |  1989-09-25  |  5KB  |  139 lines

  1. PROGRAM Tips1;
  2.  
  3. USES Memtypes,QuickDraw,OSIntf,ToolIntf,PackIntf,MacPrint;
  4.  
  5. CONST
  6.     PostScriptBegin =         190;
  7.     PostScriptEnd =            191;
  8.     PostScriptHandle =        192;
  9.     PostScriptBeginNoSave =    196;
  10.  
  11.     PROCEDURE SetFont(fontName: Str255; fontSize: INTEGER; fontStyle: Style);
  12.     VAR
  13.         theFontID:  INTEGER;
  14.         thePenLoc:  Point;
  15.     BEGIN
  16.         GetFNum(fontName, theFontID);       (* Get the font ID.                         *)
  17.         TextFont(theFontID);                (* Set it.                                  *)
  18.         TextSize(fontSize);                 (* Set the size...                          *)
  19.         TextFace(fontStyle);                (* ...and the style.                        *)
  20.         GetPen(thePenLoc);                  (* Save the current pen position.           *)
  21.         DrawChar(' ');                      (* Draw a space so the font gets downloaded.*)
  22.         MoveTo(thePenLoc.h, thePenLoc.v);   (* Restore the original pen position.       *)
  23.     END;
  24.  
  25.     PROCEDURE SendPostScript(theComment: Str255);
  26.     VAR
  27.         PSCommand    : Str255;
  28.         CommandHdl    : Handle;
  29.         CRString    : Str255;
  30.         theError    : OSErr;
  31.     BEGIN
  32.         CRString := ' ';
  33.         CRString[1] := CHR(13);
  34.         PSCommand := theComment;
  35.         PSCommand := CONCAT(PSCommand, CRString);
  36.         theError := PtrToHand(POINTER(ORD(@PSCommand) + 1), CommandHdl, 
  37.                     LENGTH(PSCommand));
  38.         if theError <> noErr THEN BEGIN
  39.             (* Handle the error! *)
  40.         END;
  41.         PicComment(PostScriptHandle, LENGTH(PSCommand), CommandHdl);
  42.         DisposHandle(CommandHdl);
  43.     END;
  44.  
  45. PROCEDURE DrawStuff(theWorld : Rect);
  46.     { Draw whatever you want here.  Make sure it fits in the world rectangle. }
  47. BEGIN
  48.     (* Set the font using our new SetFont routine.  This will set the font     *)
  49.     (* for both the Quickdraw and PostScript worlds.                        *)
  50.     SetFont('Times', 14, [bold]);
  51.     PicComment(PostScriptBegin, 0, NIL);  
  52.         (********************************************)
  53.         (*** Quickdraw representation of graphic. ***)
  54.         (********************************************)
  55.         (* These calls are only executed by Quickdraw (i.e. non-PostScript)    *)
  56.         (* devices.                                                            *)
  57.         MoveTo(50, 50);
  58.         DrawString('This is some Quickdraw text (Times, 14, bold).');
  59.         MoveTo(100, 100);
  60.         LineTo(300, 300);
  61.         
  62.         (*********************************************)
  63.         (*** PostScript representation of graphic. ***)
  64.         (*********************************************)
  65.         (* These calls will only be executed by PostScript devices.            *)
  66.         SendPostScript('50 50 moveto (This is some PostScript text (Times, 14, bold).) show');
  67.         SendPostScript('100 100 moveto 300 300 lineto stroke');
  68.     PicComment(PostScriptEnd, 0, NIL);
  69.     
  70.     (* Now illustrate the use of the PostScriptBeginNoSave PicComment.        *)
  71.     PicComment(PostScriptBeginNoSave, 0, NIL);
  72.         PenPat(ltGray);
  73.         SendPostScript('.10 setgray');
  74.     PicComment(PostScriptEnd, 0, NIL);
  75.     
  76.     (* Draw a light gray line using Quickdraw. *)
  77.     MoveTo(50, 400);
  78.     Line(100, 100);
  79.     
  80.     PicComment(PostScriptBeginNoSave, 0, NIL);
  81.         PenPat(black);
  82.         SendPostScript('1.0 setgray');
  83.     PicComment(PostScriptEnd, 0, NIL);
  84. END;
  85.  
  86.  
  87. PROCEDURE PrintStuff;
  88. VAR
  89.     thePrRec    : THPrint;
  90.     thePrPort   : TPPrPort;
  91.     theStatus   : TPrStatus;
  92.     oldPort     : GrafPtr;
  93.     theError    : OSErr;
  94.     theVers:    INTEGER;
  95.  
  96. BEGIN
  97.     GetPort(oldPort);
  98.     thePrRec := THPrint(NewHandle(SIZEOF(TPrint)));
  99.    
  100.     PrOpen;
  101.     theVers := PrDrvrVers;
  102.     IF PrError = noErr THEN BEGIN
  103.        PrintDefault(thePrRec);
  104.            IF NOT PrStlDialog(thePrRec) THEN
  105.                ExitToShell;
  106.            IF NOT PrJobDialog(thePrRec) THEN
  107.                ExitToShell;
  108.            thePrPort := PrOpenDoc(thePrRec, NIL, NIL);
  109.            IF PrError = noErr THEN BEGIN
  110.                   PrOpenPage(thePrPort, NIL);
  111.                IF PrError = noErr THEN BEGIN
  112.                
  113.                    DrawStuff(thePrRec^^.prInfo.rPage);
  114.                    
  115.                END;
  116.               PrClosePage(thePrPort)
  117.            END;
  118.        PrCloseDoc(thePrPort);
  119.        IF (thePrRec^^.prJob.bJDocLoop = bSpoolLoop) and (PrError = noErr) THEN
  120.            PrPicFile(thePrRec, NIL, NIL, NIL, theStatus);
  121.     END;                
  122.     PrClose;
  123.  
  124.     SetPort(oldPort);
  125. END;
  126.  
  127. BEGIN
  128.     InitGraf(@thePort);                  {initialize QuickDraw}
  129.     InitFonts;                                    {initialize Font Manager}
  130.     FlushEvents(everyEvent, 0); {call OS Event Mgr to discard any previous events}
  131.     InitWindows;                               {initialize Window Manager}
  132.     InitMenus;                                    {initialize Menu Manager}
  133.     TEInit;                                       {initialize TextEdit}
  134.     InitDialogs(NIL);                       {initialize Dialog Manager}
  135.     InitCursor;                                {call QuickDraw to make cursor (pointer) an arrow}
  136.  
  137.     PrintStuff;
  138. END.
  139.